#include<stdio.h>
#include<math.h>
void ad(int *A, int *B)
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
void sc(int *A, int *B)
{
int i, t = 0;
for (i = 1; i <= A[0]; i++)
A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void inm(int *A, int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
int UNU[11111]={1,1,0,0,},aux2,res[11115],AA[11005],l,ok2,aux,ok,d,m,p,i,v[11110],max,j;
char ap[11111],t[11111];
int P[11111],A[11006];
int n,a[11010],nrf;
int main(){
FILE *f=fopen("indep.in","r");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
if(v[i]>max)
max=v[i];
}
fclose(f);
for(i=1;i<=max;i++){
for(j=1;j<=n;j++){
if(!(v[j]%i))
a[i]++;
}
}
for(i=2;i<=1001;i++){
if(!t[i])
for(j=i+i;j<=1001;j+=i)
t[j]=1;
}
p=0;
for(i=2;i<=1001;i++)
if(!t[i]){
p++;
P[p]=i;
}
for(i=1;i<=max;i++){
if(a[i]){
nrf=0;
aux=i;
ok=1;
d=1;
m=0;
while(aux!=1&&d<p){
ok2=1;
m=0;
while(!(aux%P[d])){
if(ok2)
nrf++;
m++;
aux/=P[d];
}
if(m>1){
ok=0;
break;
}
d++;
}
if(ok){
if(aux>1)
nrf++;
if(nrf%2==1){
A[0]=1;
A[1]=1;
for(l=2;l<=1000;l++){
A[l]=0;
AA[l]=0;
}
for(l=1;l<=a[i];l++)
inm(A,2);
AA[1]=AA[0]=0;
aux2=a[i];
while(aux2!=0){
AA[0]++;
AA[AA[0]]=aux2%10;
aux2/=10;
}
//a[i]
sc(A,UNU);
sc(A,AA);
sc(res,A);
}
else{
A[0]=1;
A[1]=1;
for(l=2;l<=1000;l++){
A[l]=0;
AA[l]=0;
}
AA[1]=AA[0]=0;
for(l=1;l<=a[i];l++)
inm(A,2);
sc(A,UNU);
aux2=a[i];
while(aux2){
AA[0]++;
AA[AA[0]]=(aux2%10);
aux2/=10;
}
sc(A,AA);
ad(res,A);
}
}
}
}
FILE *g=fopen("indep.out","w");
for(i=res[0];i>=1;i--){
fprintf(g,"%d",res[i]);
}
fclose(g);
return 0;
}