#include <fstream>
#include <cmath>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
int i,x[1010],xx[1010],j,nr,v[510],suma[510],diferenta[510],maxim,p[510][510],doi[510],n,k,pork[2],ok,nrdiv;
void sum(int A[],int B[],int C[])
{
int i,t=0;
for(i=1;i<=A[0]||i<=B[0]||t;i++)
{
t+=A[i]+B[i];
C[i]=t%10;
t=t/10;
}
C[0]=i-1;
}
void inm(int A[], int x, int C[])
{
int i,t=0;
for(i=1;i<=A[0]||t;i++)
{
t+=A[i]*x;
C[i]=t%10;
t=t/10;
}
C[0]=i-1;
}
void dif(int A[], int B[], int C[]){
int i, T=0;
for (i=B[0]+1;i<=A[0];)
B[i++]=0;
for (i=1;i<=A[0];i++) {
C[i]=A[i]-(B[i]+T);
if (C[i]<0)
T=1;
else
T=0;
if (T)
C[i]+=10;
}
C[0] = A[0];
while (!C[C[0]])
C[0]--;
}
/*
void dif(int A[],int B[],int C[])
{
int i,t=0;
for (i=B[0]+1;i<=A[0];)
B[i++]=0;
for(i=1; i<=A[0]; i++)
{
if(A[i]<B[i]+t)
{
C[i]=A[i]+10-B[i]-t;
t=1;
}
else
{
C[i]=A[i]-B[i]-t;
t=0;
}
}
C[0]=i-1;
while(C[C[0]]==0)
C[0]--;
}
*/
//int n,m,v[10000],u[10000],pork[2],i;
int main()
{
f>>n;
pork[0]=1;
pork[1]=1;
for(i=1;i<=n;i++)
{f>>v[i];if(v[i]>maxim) maxim=v[i];}
p[1][0]=1;
p[1][1]=1;
doi[0]=1;
doi[1]=2;
suma[0]=1;
suma[1]=0;
diferenta[0]=1;
diferenta[1]=0;
for(i=2;i<=n;i++)
{
inm(doi,2,doi);
dif(doi,pork,p[i]);
}
int var;
for(i=2;i<=maxim;i++)
{
ok=1;
var=i;
j=2;
while(var!=1&&ok==1)
{
nr=0;
while(var%j==0)
{
nr++;
var/=j;
if(nr>1) {ok=0;break;}
}
if(nr==1)
{
nrdiv++;
}
j++;
}
if(ok==1)
{
x[++k]=i;
xx[k]=nrdiv;
}
nrdiv=0;
}
for(i=1;i<=k;i++)
{
nr=0;
for(j=1;j<=n;j++)
{
if(v[j]%x[i]==0)
{
nr++;
}
}
if(xx[i]%2==1)
sum(diferenta,p[nr],diferenta);
else
sum(suma,p[nr],suma);
}
sum(p[n],suma,p[n]);
dif(p[n],diferenta,p[n]);
if(p[n][0]<=0)
g<<0;
else
{
for(i=p[n][0];i>=1;i--)
g<<p[n][i];
}
return 0;
}
/*#include <fstream>
using namespace std;
ifstream f("intersectiesegmente.in");
ofstream g("intersectiesegmente.out");
int
int main()
{
f>>X1>>Y1>>X2>>Y2>>X3>>Y3>>X4>>Y4;
A1=Y2-Y1;
B1=X1-X2;
C1=Y1*(X2-X1)-X1*(Y2-Y1);
A2=Y4-Y3;
B2=X3-X4;
C2=Y3*(X4-X3)-X3*(Y4-Y3);
Y=A1*C2-A2*C1;
Y=Y/(A2*B1-B2*A1);
X=Y*(-B2)-C2;
X=X/A2;
return 0;
}
*/