#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
vector<int> f[maxn];
void Init() {
  for (int i = 1; i < maxn; i++)
    for (int j = i; j < maxn; j += i) f[j].push_back(i);
}
int A, B, C;
inline int Type(int x) {
  int ret = 0;
  if (A % x == 0) ret += 4;
  if (B % x == 0) ret += 2;
  if (C % x == 0) ret += 1;
  return ret;
}
inline bool OK(int a, int b, int c) {
  if ((a & 4) && (b & 2) && (c & 1)) return true;
  if ((a & 4) && (c & 2) && (b & 1)) return true;
  if ((b & 4) && (a & 2) && (c & 1)) return true;
  if ((b & 4) && (c & 2) && (a & 1)) return true;
  if ((c & 4) && (a & 2) && (b & 1)) return true;
  if ((c & 4) && (b & 2) && (a & 1)) return true;
  return false;
}
int main() {
  Init();
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%d%d%d", &A, &B, &C);
    vector<int> v;
    for (int i = 0; i < f[A].size(); i++) v.push_back(f[A][i]);
    for (int i = 0; i < f[B].size(); i++) v.push_back(f[B][i]);
    for (int i = 0; i < f[C].size(); i++) v.push_back(f[C][i]);
    sort(v.begin(), v.end());
    int m = unique(v.begin(), v.end()) - v.begin();
    int cnt[10] = {0};
    for (int i = 0; i < m; i++) cnt[Type(v[i])]++;
    long long ans = 0;
    for (int i = 1; i <= 7; i++) {
      for (int j = i; j <= 7; j++) {
        for (int k = j; k <= 7; k++) {
          if (OK(i, j, k)) {
            if (i == j && j == k)
              ans += cnt[i] * (cnt[i] + 1) * (cnt[i] + 2) / 6;
            else if (i == j)
              ans += cnt[i] * (cnt[i] + 1) / 2 * cnt[k];
            else if (j == k)
              ans += cnt[i] * cnt[j] * (cnt[j] + 1) / 2;
            else
              ans += cnt[i] * cnt[j] * cnt[k];
            if (ans != 0 && ans != 1 && ans != 2 && ans != 3) {
              int stop = 0;
              stop++;
            }
          }
        }
      }
    }
    printf("%lld\n", ans);
  }
  return 0;
}
