#include <stdio.h>
#define MAXN (1 << 17)
typedef long long llong;
typedef int byte;
int N, R[66][129][129], D[8], sgn[8], NRD;
byte A[MAXN], B[MAXN], C[MAXN];
byte rest[66][129];
llong res;
void baga(int V)
{
int i, j, k, t, d, r1, r2, aux, r, a2, semn;
for(NRD = 0, aux = V, i = 2; i <= aux; i++)
if(aux%i == 0)
{
D[++NRD] = i, sgn[NRD] = 1;
while(aux%i == 0)
aux /= i;
}
if(NRD == 2)
D[++NRD] = D[1]*D[2], sgn[NRD] = -1;
else
if(NRD == 3)
D[++NRD] = D[1]*D[2], sgn[NRD] = -1, D[++NRD] = D[1]*D[3],
sgn[NRD] = -1, D[++NRD] = D[2]*D[3], sgn[NRD] = -1,
D[++NRD] = D[1]*D[2]*D[3], sgn[NRD] = 1;
for(j = 1; j <= NRD; j++)
{
d = D[j], semn = sgn[j];
for(i = 1; i <= N; i++)
{
r1 = d-rest[B[i]][d], r2 = d-rest[C[i]][d];
if(r1 == d) r1 = 0;
if(r2 == d) r2 = 0;
if((a2 = V-A[i]) >= 0 && a2 <= 64)
{
t = R[a2][r1][r2];
if(semn == 1)
res += (llong)t;
else
res -= (llong)t;
}
R[A[i]][rest[B[i]][d]][rest[C[i]][d]]++;
}
for(i = 1; i <= N; i++)
{
r1 = rest[B[i]][d], r2 = rest[C[i]][d];
R[A[i]][r1][r2] = 0;
}
}
}
int main(void)
{
freopen("puteri.in", "rt", stdin);
freopen("puteri.out", "wt", stdout);
int i, j, k, v, ind, nr1 = 0, nr0 = 0, nr2 = 0;
scanf("%d\n", &N);
for(i = 1; i <= N; i++)
scanf("%d %d %d\n", &A[i], &B[i], &C[i]);
for(i = 0; i <= 64; i++)
for(j = 1; j <= 128; j++)
rest[i][j] = i%j;
for(v = 2; v <= 128; v++)
baga(v);
for(ind = 0, i = 1; i <= N; i++)
if(A[i] == 0)
A[++ind] = B[i], B[ind] = C[i], C[ind] = 0;
N = ind;
for(v = 2; v <= 128; v++)
baga(v);
for(ind = 0, i = 1; i <= N; i++)
if(A[i] == 0)
A[++ind] = B[i];
N = ind;
for(i = 1; i <= N; i++)
{
if(A[i] == 0)
res += (llong)nr2;
if(A[i] == 1)
res += (llong)nr1;
if(A[i] == 2)
res += (llong)nr0;
nr0++;
if(A[i] >= 1)
nr1++;
if(A[i] >= 2)
nr2++;
}
printf("%lld\n", res);
return 0;
}