#include <bits/stdc++.h>
using namespace std;
long long vis[80];
long long prime[80] = {0};
long long a[200000];
long long fc[80][200000] = {{0}};
int n;
int pnum;
int get_primes(int m) {
  memset(vis, 0, sizeof(vis));
  int cnt = 1;
  for (int i = 2; i < m; i++) {
    if (!vis[i]) {
      prime[cnt++] = i;
      for (int j = i * i; j < m; j += i) vis[j] = 1;
    }
  }
  return cnt;
}
void change(long long k, long long g) {
  for (int i = 1; i <= pnum;) {
    if (k % prime[i] == 0) {
      fc[i][g] ^= 1;
      k /= prime[i];
    } else
      i++;
  }
  return;
}
long long gauss() {
  long long g = 0;
  int i, j;
  for (j = 1; j <= n && g < pnum; j++) {
    for (i = g + 1; i <= pnum; i++)
      if (fc[i][j] == 1) break;
    if (i <= pnum) {
      g++;
      for (int p = j; p <= n; p++) swap(fc[g][p], fc[i][p]);
      for (int p = g + 1; p <= pnum; p++) {
        if (fc[p][j] == 1) {
          for (int q = j; q <= n; q++) fc[p][q] ^= fc[g][q];
        }
      }
    }
  }
  return g;
}
long long qpow(long long a, long long b, long long m) {
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans = (ans * a) % m;
      b--;
    }
    b /= 2;
    a = a * a % m;
  }
  return ans;
}
int main() {
  int cas = 1;
  int t = 1;
  get_primes(70);
  pnum = 19;
  {
    memset(fc, 0, sizeof(fc));
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i], change(a[i], i);
    int r = gauss();
    long long ans = qpow(2, (long long)(n - r), 1000000007) - 1;
    printf("%lld\n", ans);
  }
}
