what is VIRT column in HTOP? memory overhead?
I would stop worrying about the VIRT thing.
Virtual Memory Usage from Java under Linux, too much memory used
I suspect the top page is allocated for vsyscall purposes (see What are vdso and vsyscall?). Meaning that whilst your process has a 16Gb range of virtual memory mapped, it certainly isn't using anything like that in terms of physical memory. Go by the RES entry.
Regarding whether you need more machines or more memory... Is it slow? You would need to do more forensics on where your bottlenecks are, but the htop capture there doesn't appear to be under much pressure.