#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]][r1][r2]++;
}
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;
R[A[i]][r1][r2] = 0;
}
}
}
int main(void)
{
freopen("puteri.in", "rt", stdin);
freopen("puteri.out", "wt", stdout);
int i, j, k, v;
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);
printf("%lld\n", res);
return 0;
}