#include <bits/stdc++.h>
using namespace std;
const long long int modulo = 1e9 + 7;
void anyade(long long int &a, long long int b) { a = (a + b) % modulo; }
int numdiv(int a, int b) {
  int c = 0;
  for (; a % b == 0; a /= b, c++)
    ;
  return c;
}
const int limite = 100005;
long long int expo[limite];
long long int seleccionpar(long long int n) {
  if (n == 0) return 1;
  return expo[n - 1];
}
long long int seleccionimpar(long long int n) {
  if (n == 0) return 0;
  return expo[n - 1];
}
vector<int> primo;
int esprimo[71];
int veces[71];
int mascara[71];
int n;
long long int maneras[1 << 19];
long long int nextmaneras[1 << 19];
int main() {
  ios::sync_with_stdio(false);
  expo[0] = 1;
  for (int i = 1; i < limite; i++) expo[i] = expo[i - 1] * 2 % modulo;
  for (int i = 2; i < 71; i++) esprimo[i] = 1;
  for (int i = 2; i < 71; i++) {
    if (esprimo[i]) {
      primo.push_back(i);
      for (int j = i + i; j < 71; j += i) esprimo[j] = 0;
    }
  }
  for (int x = 1; x < 71; x++) {
    for (int j = 0; j < int(primo.size()); j++) {
      int p = primo[j];
      mascara[x] |= (numdiv(x, p) % 2) << j;
    }
  }
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    veces[x]++;
  }
  maneras[0] = 1;
  for (int x = 0; x < 71; x++) {
    for (int c = 0; c < 1 << 19; c++)
      anyade(nextmaneras[c],
             seleccionpar(veces[x]) * maneras[c] +
                 seleccionimpar(veces[x]) * maneras[c ^ mascara[x]]);
    for (int c = 0; c < 1 << 19; c++) {
      maneras[c] = nextmaneras[c];
      nextmaneras[c] = 0;
    }
  }
  cout << ((maneras[0] - 1 + modulo) % modulo) << endl;
}
