#include <cstdio>
#include <cstring>
const int KMAX = 1050;
const int NMAX = 1005;
const int CMAX = 1050;
int V[NMAX], P[NMAX][CMAX], Q[KMAX], QF[KMAX], PR[KMAX], SOL[CMAX], n, i, j, k, u, x, c, NQ;
void mult (int*, int, int*), sub (int*, int*), add (int*, int*);
int main () {
freopen ("indep.in", "r", stdin);
freopen ("indep.out", "w", stdout);
for (i = 2; i <= KMAX; i++)
if (!PR[i]) {
PR[++PR[0]] = i;
for (j = 2 * i; j <= KMAX; j += i)
PR[j] = 1;
}
scanf ("%d", &n);
for (i = 1; i <= n; i++) {
scanf ("%d", &V[i]);
if (V[i] > k) k = V[i];
}
P[0][0] = 1, P[0][1] = 1;
for (i = 1; i <= n; i++)
mult (P[i-1], 2, P[i]);
Q[0] = 1, QF[0] = 0;
for (i = 1; PR[i] <= k; i++) {
u = NQ;
for (j = 0; j <= u; j++) {
x = Q[j] * PR[i];
if (x <= k)
NQ++, Q[NQ] = x, QF[NQ] = QF[j] + 1;
}
}
memcpy (SOL, P[n], sizeof (P[n]));
sub (SOL, P[0]);
for (i = 1; i <= NQ; i++) {
x = Q[i], c = 0;
for (j = 1; j <= n; j++)
if (V[j] % x == 0)
c++;
if (QF[i] % 2) {
add (SOL, P[0]);
sub (SOL, P[c]);
}
else {
add (SOL, P[c]);
sub (SOL, P[0]);
}
}
for (i = SOL[0]; i > 0; i--)
printf ("%d", SOL[i]);
if (!SOL[0])
printf ("0");
return 0;
}
void mult (int A[], int x, int B[]) {
int i, t = 0;
for (i = 1; i <= A[0]; i++) {
B[i] = (A[i] * x + t) % 10;
t = (A[i] * x + t) / 10;
}
B[0] = A[0];
while (t) {
B[++B[0]] = t % 10;
t /= 10;
}
}
void sub (int A[], int B[]) {
int i, t = 0;
for (i = B[0] + 1; i <= A[0]; i++)
B[i] = 0;
for (i = 1; i <= A[0]; i++) {
A[i] -= (B[i] + t);
if (A[i] < 0) A[i] += 10, t = 1;
else t = 0;
}
while (!A[A[0]] && A[0] > 0)
A[0]--;
}
void add (int A[], int B[]) {
int i, max, aux, t = 0;
for (i = B[0] + 1; i <= A[0]; i++)
B[i] = 0;
for (i = A[0] + 1; i <= B[0]; i++)
A[i] = 0;
max = A[0] > B[0] ? A[0] : B[0];
for (i = 1; i <= max; i++) {
aux = A[i];
A[i] = (aux + B[i] + t) % 10;
t = (aux + B[i] + t) / 10;
}
if (t)
A[++A[0]] = t;
}