You need to keep splitting your world into little parts. There are plenty ways of handling collisions between a height map and objects, but in the end, every method has the same problem; The Amount.
So you already took the first step, by deviding your world into chunk's. Next you need to change your server in way, that the server handles physic updates per chunk. Now you need to do the standard collision of an object against a heightmap to position it correctly. Next do collision against all objects with collision in one chunk.
For now you have a working solution. Next you need to take care of, finding the sweet spot for server X for chunk size. Find a good standard size of chunk the server is able to handle collision against quick, per users active at the same time.
So if many users are online on the same server the same time, chunk sizes need to shrink, as less players are online chunk sizes can grow.
You also need to be aware of, that there will be a max, that server X can handle the same time.
You could drastically raise your performance, if collision between player isn't mendatory, so only heightmap and physical objects.
In the end, it's a long way of optimizing these parameters and finding the sweet spot or even making it dynamically change.