#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void dump(const vector<int>& a) {
  for (int i = 0; i < a.size(); i++) {
    cerr << a[i] << ' ';
  }
  cerr << endl;
}
vector<pair<int, int>> factorise(long long m) {
  vector<pair<int, int>> res;
  for (long long i = 2; i * i <= m; i++) {
    if (m % i == 0) {
      int cnt = 0;
      while (m % i == 0) {
        cnt++;
        m /= i;
      }
      res.emplace_back(i, cnt);
    }
  }
  return res;
};
using ll = long long;
ll gcd(ll a, ll b, ll& x, ll& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  ll x1, y1;
  ll d = gcd(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return d;
}
bool debug = false;
using pii = pair<int, int>;
using pll = pair<long long, long long>;
const int magic = 3;
const int INF = 1e9;
void solve();
void init();
template <typename T, int N>
void dump(const array<T, N>& a) {
  for (int i = 0; i < a.size(); i++) {
    cerr << a[i] << ' ';
  }
  cerr << endl;
}
int main(int argc, char** argv) {
  cout.precision(15);
  int t = 1;
  cin >> t;
  init();
  for (int tt = 1; tt <= t; tt++) {
    solve();
  }
  return 0;
}
const int MX = 100500;
vector<int> delim[MX];
int p[MX];
long long troek[MX];
long long dvoek(long long n) { return n * (n + 1) / 2; }
void go(int n) {
  auto& curr = delim[n];
  int pr = p[n];
  if (pr == 0) {
    if (n == 1) {
      curr = {1};
    } else {
      curr = {1, n};
    }
    return;
  }
  int cnt = 0;
  while (n % pr == 0) {
    n /= pr;
    cnt++;
  }
  curr.reserve((cnt + 1) * delim[n].size());
  int mult = 1;
  for (int i = 0; i <= cnt; i++) {
    for (auto div : delim[n]) {
      curr.push_back(mult * div);
    }
    mult *= pr;
  }
  sort(curr.begin(), curr.end());
}
void init() {
  for (int i = 1; i < MX; i++) {
    troek[i] = troek[i - 1] + dvoek(i);
  }
  for (int i = 2; i * i < MX; i++) {
    if (p[i] == 0) {
      for (int j = i; j * i < MX; j++) {
        p[i * j] = i;
      }
    }
  }
  for (int n = 1; n < MX; n++) {
    go(n);
  }
  for (int n = 1; n < MX; n++) {
    delim[n].push_back(int(1e9));
  }
}
int cnt[10];
int cnt2[10];
int sum[10];
int sum2[10];
long long solve_true(int a, int b, int c) {
  vector<decltype(delim[a].cbegin())> x(3);
  x[0] = delim[a].begin();
  x[1] = delim[b].begin();
  x[2] = delim[c].begin();
  memset(cnt, 0, sizeof(cnt));
  while (true) {
    int z = *x[0];
    for (int i = 1; i < 3; i++) {
      z = min(z, *x[i]);
    }
    if (z > MX) {
      break;
    }
    int mask = 0;
    for (int i = 0; i < 3; i++) {
      if (*x[i] == z) {
        mask |= 1 << i;
        x[i]++;
      }
    }
    cnt[mask]++;
  }
  for (int i = 1; i < 8; i++) {
    if (debug) cerr << cnt[i] << ' ';
    cnt2[i] = cnt[i] * cnt[i];
    sum[i] = cnt[i] + sum[i - 1];
    sum2[i] = cnt2[i] + sum2[i - 1];
  }
  if (debug) cerr << endl;
  long long res = troek[cnt[7]];
  res += dvoek(cnt[7]) * sum[6];
  res += cnt[7] * (dvoek(cnt[3]) + dvoek(cnt[5]) + dvoek(cnt[6]));
  res += cnt[7] * (sum[6] * sum[6] - sum2[6]) / 2;
  for (int i = 0; i < 3; i++) {
    int bit = 1 << i;
    res += (cnt[bit | 1] + cnt[bit | 2] + cnt[bit | 4]) * dvoek(cnt[7 - bit]);
  }
  res += cnt[3] * cnt[5] * cnt[6];
  res += (cnt[3] * cnt[5] + cnt[3] * cnt[6] + cnt[5] * cnt[6]) *
         (cnt[1] + cnt[2] + cnt[4]);
  res += (cnt[3] + cnt[5] + cnt[6]) *
         (cnt[1] * cnt[2] + cnt[1] * cnt[4] + cnt[2] * cnt[4]);
  res -= cnt[3] * cnt[1] * cnt[2] + cnt[5] * cnt[1] * cnt[4] +
         cnt[6] * cnt[2] * cnt[4];
  res += cnt[1] * cnt[2] * cnt[4];
  return res;
}
long long slow(int a, int b, int c) {
  set<vector<int>> s;
  for (int x = 1; x <= a; x++) {
    if (a % x) continue;
    for (int y = 1; y <= b; y++) {
      if (b % y) continue;
      for (int z = 1; z <= c; z++) {
        if (c % z) continue;
        vector<int> t = {x, y, z};
        sort(begin(t), end(t));
        s.insert(t);
      }
    }
  }
  return s.size();
}
void stress(int n = 60) {
  debug = false;
  for (int a = 1; a <= n; a++) {
    for (int b = a; b <= n; b++) {
      for (int c = b; c <= n; c++) {
        if (slow(a, b, c) != solve_true(a, b, c)) {
          cerr << a << ' ' << b << " " << c << endl;
          cerr << slow(a, b, c) << ' ' << solve_true(a, b, c) << endl;
        }
      }
    }
  }
}
void solve() {
  int a, b, c;
  cin >> a >> b >> c;
  cout << solve_true(a, b, c) << endl;
}
