This is a non-trivial upgrade - and would have to bounce through 2.0,2.1,2.2, 3.11, 4 with running ssupgradetables
at each step. (I'm not 100% sure you can skip some of the 2 releases or not.)
If you can handle the downtime - I would recommend exporting the data from the 1.2 (with a tool like DS Bulk) and then importing into a fresh 4.x cluster set up. It will be significantly less pain / operational overhead than the upgrade process.
The option of running sstableloader on a snapshot gets tricky because 4.x has no knowledge of the sstableformat from 1.2, the snapshot sstables would need to go through a few upgrades to get to a format that 4.x can understand.
Please note - if your application is using thrift with the C* 1.2, then you will not be able to upgrade to 4, since the protocol is removed, the latest version of 3.11 (3.11.15 at the time of writing) is as far as you can upgrade to.