#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX = 500;
const int CIFMAX = 300;
int a[NMAX+5];
int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 27, 29, 31, 37, 41};
struct HN
{
int n;
int a[CIFMAX];
HN()
{
n = 1;
memset(a, 0, sizeof(a));
}
HN(int x)
{
n = 0;
memset(a, 0, sizeof(a));
do
{
a[n++] = x%10;
x/=10;
}
while(x);
}
};
HN &sum(HN &a, HN &b)
{
HN ans;
ans.n = max(a.n, b.n);
int c = 0;
for(int i=0; i<ans.n; i++)
{
ans.a[i] = a.a[i]+b.a[i]+c;
c = ans.a[i]/10;
ans.a[i]%=10;
}
if(c) ans.a[ans.n++] = c;
return ans;
}
HN &dif(HN &a, HN &b)
{
HN ans;
ans.n = a.n;
int c = 0;
for(int i=0; i<ans.n; i++)
{
ans.a[i] = a.a[i]-b.a[i]-c;
if(ans.a[i] < 0)
{
c=1;ans.a[i]+=10;
}
}
while(ans.n>1 && ans.a[ans.n-1] == 0)ans.n--;
return ans;
}
HN &prod(HN &a, HN &b)
{
HN ans;
for(int i=0; i<a.n; i++)
{
for(int j=0; j<b.n; j++)
{
ans.a[i+j] += a.a[i]*b.a[j];
}
}
int c = 0;
for(int i=0; i<a.n+b.n-1; i++)
{
ans.a[i]+=c;
c = ans.a[i]/10;
ans.a[i]%=10;
}
ans.n = a.n+b.n-1;
if(c)
{
ans.a[ans.n++] = c%10;
c/=10;
}
if(c)ans.a[ans.n++] = c;
return ans;
}
void print(HN &x)
{
for(int i=x.n-1; i>=0; i--)
printf("%d", x.a[i]);
printf("\n");
}
HN p2[NMAX+5];
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int n;
scanf("%d", &n);
int Max = -1;
for(int i=0; i<n; i++)
{
scanf("%d", &a[i]);
Max = max(Max, a[i]);
}
HN p = 1;
for(int i=0; i<=n; i++)
{
p2[i] = p;
HN other = 2;
p = prod(p, other);
}
HN Ans;
for(int i=2; i<=Max; i++)
{
int lim = (int)sqrt(1.0*i);
int pos = 0, e = 0;
int c = i;
bool ok = true;
while(primes[pos]<=lim)
{
if(c%primes[pos] == 0)
{
c/=primes[pos];
e++;
}
if(c%primes[pos] == 0)
{
ok = false;
break;
}
pos++;
}
if(!ok)continue;
int nr = 0;
for(int j=0; j<n; j++)
if(a[j]%i == 0)
nr++;
if(c>1)e++;
if(e%2==1)
{
Ans = sum(Ans, p2[nr]);
HN other = 1;
Ans = dif(Ans, other);
}
else
{
HN other = 1;
Ans = sum(Ans, other);
Ans = dif(Ans, p2[nr]);
}
}
Ans = dif(p2[n], Ans);
HN other = 1;
Ans = dif(Ans, other);
print(Ans);
return 0;
}
//#include <cstdio>
//#include <cmath>
//#include <cstring>
//#include <algorithm>
//
//using namespace std;
//
//const int NMAX = 500;
//const int CIFMAX = 300;
//
//int a[NMAX+5];
//int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 27, 29, 31, 37, 41};
//
//class HN
//{
//private:
// int n;
// int a[CIFMAX];
//public:
// HN()
// {
// n = 1;
// memset(a, 0, sizeof(a));
// }
// HN(int x)
// {
// n = 0;
// memset(a, 0, sizeof(a));
// do
// {
// a[n++] = x%10;
// x/=10;
// }
// while(x);
// }
// HN &operator + (const HN &other)
// {
// HN ans;
// ans.n = max(n, other.n);
// int c = 0;
// for(int i=0; i<ans.n; i++)
// {
// ans.a[i] = a[i]+other.a[i]+c;
// c = ans.a[i]/10;
// ans.a[i]%=10;
// }
// if(c) ans.a[ans.n++] = c;
// return ans;
// }
// HN &operator - (const HN &other)
// {
// HN ans;
// ans.n = n;
// int c = 0;
// for(int i=0; i<n; i++)
// {
// ans.a[i] = a[i]-other.a[i]-c;
// if(ans.a[i] < 0)
// {
// c=1;ans.a[i]+=10;
// }
// }
// while(ans.n>1 && ans.a[ans.n-1] == 0)ans.n--;
// return ans;
// }
// HN operator * (const HN &other)
// {
// HN ans;
// int m = other.n;
// for(int i=0; i<n; i++)
// {
// for(int j=0; j<m; j++)
// {
// ans.a[i+j] += a[i]*other.a[j];
// }
// }
// int c = 0;
// for(int i=0; i<n+m-1; i++)
// {
// ans.a[i]+=c;
// c = ans.a[i]/10;
// ans.a[i]%=10;
// }
// ans.n = n+m-1;
// if(c)
// {
// ans.a[ans.n++] = c%10;
// c/=10;
// }
// if(c)ans.a[ans.n++] = c;
// return ans;
// }
// void print()
// {
// for(int i=n-1; i>=0; i--)
// printf("%d", a[i]);
// printf("\n");
// }
//};
//
//HN p2[NMAX+5];
//
//int main()
//{
// freopen("indep.in", "r", stdin);
// freopen("indep.out", "w", stdout);
// int n;
// scanf("%d", &n);
// int Max = -1;
// for(int i=0; i<n; i++)
// {
// scanf("%d", &a[i]);
// Max = max(Max, a[i]);
// }
// HN p = 1;
// for(int i=0; i<=n; i++)
// {
// p2[i] = p;
// p = p*(HN)2;
// }
// HN Ans;
// for(int i=2; i<=Max; i++)
// {
// int lim = (int)sqrt(1.0*i);
// int pos = 0, e = 0;
// int c = i;
// bool ok = true;
// while(primes[pos]<=lim)
// {
// if(c%primes[pos] == 0)
// {
// c/=primes[pos];
// e++;
// }
// if(c%primes[pos] == 0)
// {
// ok = false;
// break;
// }
// pos++;
// }
// if(!ok)continue;
// int nr = 0;
// for(int j=0; j<n; j++)
// if(a[j]%i == 0)
// nr++;
// if(c>1)e++;
// if(e%2==1)
// {
// Ans = Ans + p2[nr];
// Ans = Ans - (HN)1;
// }
// else
// {
// Ans = Ans - p2[nr];
// Ans = Ans + (HN)1;
// }
// }
// Ans = p2[n] - Ans;
// Ans = Ans - 1;
// Ans.print();
// return 0;
//}