#include <fstream>
#include <cstring>
#define int long long
using namespace std;
ifstream cin("puteri.in");
ofstream cout("puteri.out");
struct nr
{
int a2,b3,c5;
} num[100001];
int n,a,b,c;
int sign[129];
int ciur[129];
int numereprimediv(int nr)
{
int d=2,divprimi=0;
while(nr>1)
{
bool op=0;
while(nr%d == 0)
nr/=d,op=1;
if(op)
divprimi++;
d++;
if(d*d > nr)
d=nr;
}
return divprimi;
}
int elems[65][65][65],m[134];
int solve(int mod)
{
int new2,new3,new5;
int comb=0;
memset(elems,0,sizeof(elems));
for(int i=0; i<=128; i++)
m[i] = i%mod;
for(int i=1; i<=n; i++)
{
new2 = m[mod - m[num[i].a2]];
new3 = m[mod - m[num[i].b3]];
new5 = m[mod - m[num[i].c5]];
if(new2<=64 && new3<=64&&new5<=64)
comb += elems[new2][new3][new5];
elems[m[num[i].a2]][m[num[i].b3]][m[num[i].c5]]++;
}
return comb;
}
int32_t main()
{
int rsp=0;
cin>>n;
for(int i=1; i<=n; i++)
{
int a2,b3,c5;
cin>>a2>>b3>>c5;
num[i]= {a2,b3,c5};
}
fill(sign+1,sign+128+1,1);
for(int i=2; i<=128; i++)
{
if(!ciur[i])
{
for(int j=i; j<=128; j+=i)
{
sign[j]*=-1;
ciur[j]=1;
}
for(int j=i*i; j<=128; j+=i*i)
sign[j]=0;
}
rsp-=sign[i] * solve(i);
}
cout<<rsp;
return 0;
}