#include <bits/stdc++.h>
using namespace std;
#define el '\n'
#define TASK ""
#define int long long
#define MASK(n) (1LL << (n))
const int MAXN = 1e5 + 5;
const int MOD = 1e9 + 7;
int n;
int a[MAXN];
bool isPrime[75];
vector <int> prime;
vector <int> dp;
vector <int> n_dp;
map <int , int> ap;
void Sieve(){
for(int i = 2 ; i <= 70 ; i ++){
if (! isPrime[i]){
prime.push_back(i);
for(int j = i * i ; j <= 70 ; j += i){
isPrime[j] = 1;
}
}
}
}
int modPow(int base, int exp){
int res = 1;
while(exp){
if(exp & 1) res = res * base % MOD;
base = base * base % MOD;
exp >>= 1;
}
return res;
}
signed main(){
if (fopen(TASK".inp" , "r")){
freopen(TASK".inp" , "r" , stdin);
freopen (TASK".out" , "w" , stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Sieve();
cin >> n;
int sz = prime.size();
dp.assign(MASK(sz) , 0);
n_dp.assign(MASK(sz) , 0);
for(int i = 1 ; i <= n ; i ++){
int x;
cin >> x;
int mask = 0 , v = x;
for(int j = 0 ; j < sz ; j ++){
int cnt = 0;
while(v % prime[j] == 0){
v /= prime[j];
cnt ^= 1;
}
if (cnt) mask |= MASK(j);
}
ap[mask] ++;
}
dp[0] = 1;
for(auto x : ap){
int f = x.second;
int way = modPow(2 , f - 1);
int even = way , odd = way;
fill(n_dp.begin() , n_dp.end() , 0);
for(int mask = 0 ; mask < MASK(sz) ; mask ++){
if (dp[mask] != 0){
int cur = dp[mask];
n_dp[mask] = (n_dp[mask] + cur * even) % MOD;
int mask2 = mask ^ x.first;
n_dp[mask2] = (n_dp[mask2] + cur * odd) % MOD;
}
}
dp.swap(n_dp);
}
cout << (dp[0] - 1 + MOD) % MOD;
return 0;
}
/*
⠀⠀⠀⠀⠀⠀⢀⡤⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀
⠀⠀⠀⠀⠀⢀⡏⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⣀⠴⠋⠉⠉⡆
⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠈⠉⠉⠙⠓⠚⠁⠀⠀⠀⠀⣿
⠀⠀⠀⠀⢀⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣄
⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠶⠀⠀⠀⠀⠀⠀⠦⠀⠀⠀⠀⠀⠸⡆
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBlbCAnXG4nCiNkZWZpbmUgVEFTSyAiIgojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBNQVNLKG4pICgxTEwgPDwgKG4pKQoKY29uc3QgaW50IE1BWE4gPSAxZTUgKyA1Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKCmludCBuOwppbnQgYVtNQVhOXTsKYm9vbCBpc1ByaW1lWzc1XTsKdmVjdG9yIDxpbnQ+IHByaW1lOwp2ZWN0b3IgPGludD4gZHA7CnZlY3RvciA8aW50PiBuX2RwOwptYXAgPGludCAsIGludD4gYXA7Cgp2b2lkIFNpZXZlKCl7Cglmb3IoaW50IGkgPSAyIDsgaSA8PSA3MCA7IGkgKyspewoJCWlmICghIGlzUHJpbWVbaV0pewoJCQlwcmltZS5wdXNoX2JhY2soaSk7CgkJCWZvcihpbnQgaiA9IGkgKiBpIDsgaiA8PSA3MCA7IGogKz0gaSl7CgkJCQlpc1ByaW1lW2pdID0gMTsKCQkJfQoJCX0KCX0KfQoKaW50IG1vZFBvdyhpbnQgYmFzZSwgaW50IGV4cCl7CiAgICBpbnQgcmVzID0gMTsKICAgIHdoaWxlKGV4cCl7CiAgICAgICAgaWYoZXhwICYgMSkgcmVzID0gcmVzICogYmFzZSAlIE1PRDsKICAgICAgICBiYXNlID0gYmFzZSAqIGJhc2UgJSBNT0Q7CiAgICAgICAgZXhwID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKc2lnbmVkIG1haW4oKXsKCWlmIChmb3BlbihUQVNLIi5pbnAiICwgInIiKSl7CiAgICAJZnJlb3BlbihUQVNLIi5pbnAiICwgInIiICwgc3RkaW4pOyAKICAgIAlmcmVvcGVuIChUQVNLIi5vdXQiICwgInciICwgc3Rkb3V0KTsgCgl9CgogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKE5VTEwpOwoKCVNpZXZlKCk7CgoJY2luID4+IG47CgoJaW50IHN6ID0gcHJpbWUuc2l6ZSgpOwoKCWRwLmFzc2lnbihNQVNLKHN6KSAsIDApOwoJbl9kcC5hc3NpZ24oTUFTSyhzeikgLCAwKTsKCglmb3IoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSArKyl7CgkJaW50IHg7CgkJY2luID4+IHg7CgkJaW50IG1hc2sgPSAwICwgdiA9IHg7CgkJZm9yKGludCBqID0gMCA7IGogPCBzeiA7IGogKyspewoJCQlpbnQgY250ID0gMDsKCQkJd2hpbGUodiAlIHByaW1lW2pdID09IDApewoJCQkJdiAvPSBwcmltZVtqXTsKCQkJCWNudCBePSAxOwoJCQl9CgkJCWlmIChjbnQpIG1hc2sgfD0gTUFTSyhqKTsKCQl9CgkJYXBbbWFza10gKys7Cgl9CgoJZHBbMF0gPSAxOwoKCWZvcihhdXRvIHggOiBhcCl7CgkJaW50IGYgPSB4LnNlY29uZDsKCQlpbnQgd2F5ID0gbW9kUG93KDIgLCBmIC0gMSk7CgkJaW50IGV2ZW4gPSB3YXkgLCBvZGQgPSB3YXk7CgkJZmlsbChuX2RwLmJlZ2luKCkgLCBuX2RwLmVuZCgpICwgMCk7CgkJZm9yKGludCBtYXNrID0gMCA7IG1hc2sgPCBNQVNLKHN6KSA7IG1hc2sgKyspewoJCQlpZiAoZHBbbWFza10gIT0gMCl7CgkJCQlpbnQgY3VyID0gZHBbbWFza107CgkJCQluX2RwW21hc2tdID0gKG5fZHBbbWFza10gKyBjdXIgKiBldmVuKSAlIE1PRDsKCQkJCWludCBtYXNrMiA9IG1hc2sgXiB4LmZpcnN0OwoJCQkJbl9kcFttYXNrMl0gPSAobl9kcFttYXNrMl0gKyBjdXIgKiBvZGQpICUgTU9EOwoJCQl9CgkJfQoJCWRwLnN3YXAobl9kcCk7Cgl9CgoJY291dCA8PCAoZHBbMF0gLSAxICsgTU9EKSAlIE1PRDsKICAgIAogICAgcmV0dXJuIDA7Cn0KCi8qCuKggOKggOKggOKggOKggOKggOKigOKhpOKjpOKjgOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKjgOKhgArioIDioIDioIDioIDioIDiooDioY/ioIDioIDioIjioLPio4TioIDioIDioIDioIDioIDio4DioLTioIvioInioInioYYK4qCA4qCA4qCA4qCA4qCA4qK44qCA4qCA4qCA4qCA4qCA4qCI4qCJ4qCJ4qCZ4qCT4qCa4qCB4qCA4qCA4qCA4qCA4qO/CuKggOKggOKggOKggOKigOKgnuKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKgueKjhArioIDioIDioIDioIDioZ7ioIDioIDioIDioIDioIDioLbioIDioIDioIDioIDioIDioIDioKbioIDioIDioIDioIDioIDioLjioYYKCgoJCQkJCQkJCQkqLwo=