I'm stuck on what to do to connect my geth instances. I've tried creating a static-nodes.json file and I put in the enode addresses of the other instances that I created but I don't think I did that right either because nothing is connecting. If I am to create a static-nodes file and I have three geth instances I always want to connect, do I need to put a static-node.json file in each seperate directory of the three nodes I created with the other two nodes' addresses?

That worked! I still have no idea then why my previous attempts failed. Now how do I go about turning these into static nodes so they always connect? Do I just put the enode URLs with [::] as 127.0.0.1 into a .json file and put it in both the directories of the nodes?

The genesis block need not be in the datadir of a node. I prefer storing the genesis block in another folder so that it doesn't get overwritten. It should be initialized by every instance, not just one node. If you don't initialize the genesis block, your node will start the blockchain with the default Ethereum genesis block and will be running a different blockchain.