What would be the best approach for rendering multiple objects for mobile?

Hi,
I’m starting a new project (RTS game for mobile) and I’m still in the prototype/proof of concept stage but I’m hitting a dead end already.
As part of my game, I pushed the test to the maximum objects/units that would be on screen at the same time and pretty much it all went downhill, sending the frames per second below 20 and of course lagging so bad and almost melting my phones in the process.
The scene has these stats in two different states:

State ONE only static objects (map):
Characters/units: none (0)
Triangles: 30k triangles
Batches: 22
Frames per second: low-end phone = 55 fps, mid-range phone = 60 fps

State TWO static and dynamic objects:
Characters/units: 70 (50 of the same + 20 of the same)
Triangles: 85k triangles
Batches: 210
Frames per second: low-end phone = 15 fps, mid-range phone = 20 fps

As you can see, with that framerate the game is unplayable.
I’ve have optimized the static objects for batching and even for LOD and culling, using atlases, static/baked light (no dynamic lights and zero shadows), using shaders for mobile and all together in one mesh. Different combinations have no impact at the end until I add the 70 units everything breaks.
I’m using low poly models and reducing the triangles/vertices of meshes of the meshes even further that they look slightly deformed. The units range from around 600 (the 60 units) to 800 triangles (the 20 units). Anything lower that than would be simply an unrecognizable shape.
Said all that, what would be the best approach to handle/render multiple units for an RTS game for mobile platforms?
Is there any way to reduce batches/draw calls when having multiple dynamic objects on screen?

Thanks.

This might help

Why not have special struct for the logic (like position and all) and render the objects directly in the vertex and triangle list. Since each objects as a fixed number of vertices and triangles, you can just access their visual data by knowing their index and modifying only the relevant vertex. Of course it would also works with polling.