#include <bits/stdc++.h>
#define DIM 510
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
int n,i,j,k,nr,fact,e,ok,v[DIM],x[2*DIM],y[2*DIM],doi[DIM],p[DIM][DIM],maxim,d,s1[DIM],s2[DIM];
void adunare(int A[],int B[],int C[]) {
int t=0;
C[0]=max(A[0],B[0]);
for (int i=1;i<=C[0];i++) {
C[i]=A[i]+B[i]+t;
t=C[i]/10;
C[i]%=10;
}
if (t)
C[++C[0]]=t;
}
void scadere(int A[],int B[]) {
int t=0;
for (int i=B[0]+1;i<=A[0];i++)
B[i]=0;
for (int i=1;i<=A[0];i++) {
A[i]=A[i]-(B[i]+t);
if (A[i]<0)
t=1, A[i]+=10;
else
t=0;
}
while (!A[A[0]])
A[0]--;
}
void inmultire(int A[],int x,int C[]) {
int t=0;
for (int i=0;i<=A[0];i++) {
C[i]=A[i]*x+t;
t=C[i]/10;
C[i]%=10;
}
C[0]=A[0];
while (t) {
C[++C[0]]=t%10;
t/=10;
}
}
int main() {
fin>>n;
for (i=1;i<=n;i++) {
fin>>v[i];
maxim=max(maxim,v[i]);
}
doi[0]=1, doi[1]=2;
p[1][0]=1, p[1][1]=1;
for (i=2;i<=n;i++) {
adunare(p[i-1],doi,p[i]);
inmultire(doi,2,doi);
}
for (i=2;i<=maxim;i++) {
nr=i, d=2, ok=1, fact=0;
while (nr!=1) {
e=0;
while (nr%d==0)
nr/=d, e++;
if (e>=2)
ok=0;
if (e==1)
fact++;
d++;
}
if (ok) {
x[++k]=i;
y[k]=fact;
}
}
s1[0]=1, s1[1]=1;
s2[0]=1, s2[1]=1;
for (i=1;i<=k;i++) {
nr=0;
for (j=1;j<=n;j++)
if (v[j]%x[i]==0)
nr++;
if (y[i]%2==1)
adunare(s1,p[nr],s1); //cand e un nr impar de factori se aduna in s1
else
adunare(s2,p[nr],s2); //cand e un nr par de factori se aduna in s2(care se va scadea)
}
scadere(s1,s2);
scadere(p[n],s1);
if (p[n][0]<=0)
fout<<0;
for (i=p[n][0];i>=1;i--)
fout<<p[n][i];
return 0;
}