One thing you've missed is that the block reward was 5 ETH between blocks 0 and 4,370,000. At that point the block reward was reduced to 3 as part of the Byzantium hard fork, under EIP-649.
That should give you another 2 * 4,370,000 => 8,740,000 ETH.
Without seeing how you've calculated the uncle and transaction rewards, the above extra may or may not get you significantly closer to the total.
Edit:
I know that ETH had a pre-mine, and an ICO. Is it necessary to factor these numbers into my calculation?
Yes.
To quote a previous answer:
You'll see from EtherScan that the presale of 72M ETH was split into
"60M Crowdsale + 12M Other". The 12M ETH was kept by the Ethereum
Foundation, which at the time was ~17% of the total. This now accounts
for ~13% of the total..
Which is referring to this EtherScan page showing the total supply of ETH. From the EtherScan page you'll see that to get the total you're after you'll need to include both the crowdsale and the amount kept by the foundation:
ETHER DISTRIBUTION OVERVIEW
Genesis (60M Crowdsale 12M Other): 72,009,990.50 Ether
+ Mining Block Rewards: 28,263,028.50 Ether
+ Mining Uncle Rewards: 2,170,325.38 Ether
= Current Total Supply
102,443,344.37 Ether
I think 72,009,990.50 is the value you're probably after. (So the 12M value is only approximate, as is the 60M value, which you've found.)