Firstly, Exchange and SQL will run on a domain controller, however it is not an advisable option as it brings up a number of potential issues, particularly related to security.
It sounds to me like both of those servers are over specified for just being domain controllers, so you may want to look into virtulisation as you mentioned.
Resource usage for Exchange can be very user dependant, if you have alot of heavy mail users, you will need more resources. That said, for hosting 22 average users, you should easily be able to host both a DC and an single Exchange server (with all roles) on one of those machines, if you virtualised it. You haven't mentioned how much disk space you have available for Exchange, so you will need to take that into account.
You don't mention what sort of load your SQL server will need to take, but it would seem you may be able to do a similar thing with that on the other server.
However, we can only give you recommendations here and you will need to spend some time sizing what resources each of your servers will need, and choosing a virtualisation system (if that is what you choose to do).