list manipulation: precalculate ThreeJSymbols to make my program faster

Does anyone have an idea of ​​what is the best way to pre-calculate the Three symbols To use them in a loop? (I want my program to run faster, so I need to precalculate the values ​​for Three symbols and just read them in the loop)

ne = 6
ℓ0 = 2
ns = 10
γ = Join[Table[{m, 1}, {m, -ℓ0, ℓ0}],  Table[{m, -1}, {m, -ℓ0, ℓ0}]]vdir = ParallelTable[
  mi = γ[[i, 1]];
mj = γ[[j, 1]];
μi = γ[[i, 2]];
μj = γ[[j, 2]];
Yes[μi == μj, 
    Total[Table[Off[ClebschGordan::phy];
mk = γ[[k, 1]];
ip = mk - mi + mj;
north[ThreeJSymbol[{ℓ0,  mi}, {ℓ0, -mj}, {ℓtot, -mi + mj}]*
(-1) ^ (mk - mi) * ThreeJSymbol[{ℓ0, -mk}, {ℓ0,  ip}, {ℓtot, mi - mj}]*
Three jsbol[{ℓ0, 0}, {ℓ0, 0}, {ℓtot, 0}]^ 2],
{ie, 1, ne}, {ℓtot, 0, 2 ℓ0}, {k, 1, ns}],
Infinite], 0], {i, 1, ns}, {j, 1, ns}]

I also tried using Compile, but because of the different matrix sizes I'm getting for ThreeJSymbols, I'm not sure how to deal with that.