I have one User datatype which I keep very, very lean (with no default data in any field), plus two satellite datatypes with different privacy rules that include all the fields that I would have put in User. For one thing, this prevents my User datatype from getting large just from bots and visitors. For another, in many cases, it reduces the workload units (WU) as long as I’m careful about that. And third, one of my satellites includes the publicly viewable fields and the rest are hidden in User and the other satellite.
I don’t see the wisdom of three User datatypes in the way you’re suggesting, though. One User datatype would be just for logging in and, as @thethinklab.au suggested, a field with an option set to tell you what kind of user it is. Everything else would be in other datatypes. Maybe that’s what you mean rather than having three different kinds of users log into three different User datatypes (with usernames and passwords in all of them).