Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7)8 910func CF1007B(_r io.Reader, _w io.Writer) {11 in := bufio.NewReader(_r)12 out := bufio.NewWriter(_w)13 defer out.Flush()14 gcd := func(a, b int) int {15 for a != 0 {16 a, b = b%a, a17 }18 return b19 }20 const MX int = 1e521 d := [MX + 1]int{}22 for i := 1; i <= MX; i++ {23 for j := i; j <= MX; j += i {24 d[j]++25 }26 }27 const mx = 14028 C := [mx][4]int64{}29 C[0][0] = 130 for i := 1; i < mx; i++ {31 C[i][0] = 132 for j := 1; j < 4; j++ {33 C[i][j] = C[i-1][j-1] + C[i-1][j]34 }35 }36 perm3 := [][]int{{0, 1, 2}, {0, 2, 1}, {1, 0, 2}, {1, 2, 0}, {2, 0, 1}, {2, 1, 0}}37 38 var T, a, b, c int39 x := [8]int{}40 for Fscan(in, &T); T > 0; T-- {41 Fscan(in, &a, &b, &c)42 a, b, c, ab, ac, bc, abc := d[a], d[b], d[c], d[gcd(a, b)], d[gcd(a, c)], d[gcd(b, c)], d[gcd(gcd(a, b), c)]43 x[1] = a - ab - ac + abc 44 x[2] = b - ab - bc + abc45 x[4] = c - ac - bc + abc46 x[3] = ab - abc47 x[5] = ac - abc48 x[6] = bc - abc49 x[7] = abc50 51 ans := int64(0)52 t := [3]int{}53 for t[0] = 1; t[0] < 8; t[0]++ {54 for t[1] = t[0]; t[1] < 8; t[1]++ {55 for t[2] = t[1]; t[2] < 8; t[2]++ {56 for _, p := range perm3 {57 if t[p[0]]&1 > 0 && t[p[1]]&2 > 0 && t[p[2]]&4 > 0 {58 goto calc59 }60 }61 continue62 calc:63 c := [8]int{}64 c[t[0]]++65 c[t[1]]++66 c[t[2]]++67 res := int64(1)68 for i := 1; i < 8; i++ {69 if c[i] > 0 {70 res *= C[x[i]+c[i]-1][c[i]] 71 }72 }73 ans += res74 }75 }76 }77 Fprintln(out, ans)78 }79}80 8182