#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7, N = 1e5 + 20;
vector<int> primes;
int mm[(1 << 19)];
long long add(long long a, long long b) {
  return ((a % mod) + (b % mod)) % mod;
}
long long mul(long long a, long long b) {
  return ((a % mod) * (b % mod)) % mod;
}
void p() {
  for (int i = 2; i <= 70; i++) {
    int f = 0;
    for (int j = 2; j <= sqrt(i); j++) {
      if (i % j == 0 && i != j) {
        f = 1;
        break;
      }
    }
    if (f == 0) primes.push_back(i);
  }
}
long long b[(1 << 19)];
long long dd[2][(1 << 19)];
long long poww[N];
int main() {
  ios::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  int n;
  cin >> n;
  p();
  poww[0] = 1;
  for (int i = 1; i <= 100000; i++) {
    poww[i] = (poww[i - 1] * 2) % mod;
  }
  int arr[n];
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < (int)primes.size(); j++) {
      while (arr[i] % primes[j] == 0) {
        b[i] ^= (1 << j);
        arr[i] /= primes[j];
      }
    }
    mm[b[i]]++;
  }
  sort(b, b + n);
  int m = unique(b, b + n) - b;
  dd[0][0] = 1;
  for (int i = 1; i <= m; i++) {
    int z = (i & 1);
    for (int j = 0; j < (1 << 19); j++) {
      dd[z][j] = (dd[!z][j ^ b[i - 1]] * poww[mm[b[i - 1]] - 1]) % mod;
      dd[z][j] += (dd[!z][j] * poww[mm[b[i - 1]] - 1]) % mod;
      dd[z][j] %= mod;
    }
  }
  int ans = (dd[m & 1][0] + mod - 1) % mod;
  cout << ans;
}
