Many reasons, let me give you a scenario:
You run 2 web servers, then you have a load balance server running in front of that.
The load balancer throws requests to the 2 servers so the load can be increased. Additionally if you need to update the web server software you can take down 1 of the servers, update it, then shift to the other server.
Same goes for database servers you might have a master and slave server, so you can do upgrades without downtime.
The main reason why people do all this virtually is that it's REALLY easy to pop up new servers and auto install via orchestration software like Ansible or Puppet.
You do not need to go out rewire new machine, rely on cabling to 20 machines etc. You simply have a dedicated VM to provision new machines easily.
It's also cheaper to buy a bigass computer instead of 20 small computers, and alot more power efficient.