Some extra information you could provide which will help debug this: the logs from those 3 nodes which have no data and the output of "nodetool ring"
Before seeing those I can only guess, but my guess would be that in the logs on those 3 nodes you will see this: "Calculating new tokens" and this: "Split previous range (blah, blah] into <long list of tokens>"
If that is the case then it means you accidentally started those three nodes with the default configuration (single-token) and then subsequently changed (num_tokens) and then joined them into the cluster. What happens when you do this is that the node thinks it used to be responsible for a single range and is being migrated to vnodes, so it splits its single range (now a very small part of the keyspace) into 256 smaller ranges, and ends up with just a tiny portion of the ring assigned to it.
To fix this you'll need to decommission those 3 nodes, remove all data from them, then bootstrap them in again with the correct configuration from the start.