/*
* Author: Geeza
*/
#include <bits/stdc++.h>
#define ld long double
#define ll long long
#define pb push_back
#define fin(a, n) for(int i = a; i < n; i++)
#define fjn(a, n) for(int j = a; j < n; j++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
const double PI = acos(-1);
const int N = 1e5+5;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int mod = 1000000007, inf = 1e6;
string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
char dc[] = {'D', 'L', 'R', 'U'};
ll n;
vector<ll> v;
vector<int> idx, frequency;
int dp[71][1<<19];
vector<pair<int, int>> freq[71];
ll spf[72];
void precompute() {
for (int i = 0; i < 72; i++) spf[i] = i;
for (ll i = 2; i < 72; i++) {
if (spf[i] == i) {
for (ll j = i*i; j < 72; j+=i) spf[j] = i;
}
}
}
ll mul(ll a, ll b) {
return (a%mod * b%mod)%mod;
}
ll calc(ll val, ll mask) {
if (val == 71) return mask == 0;
int &ret = dp[val][mask];
if (~ret)return ret;
ret = 0;
ll ch1 = 0;
ll ch2 = 0;
if (frequency[val] > 0) {
ll c = 1; // 2^(n-1)
for (int i = 0; i+1 < frequency[val]; i++) {
c *= 2;
if (c >= mod) c -= mod;
}
ll newMask = 0;
for (auto [x, f] : freq[val]) {
if (f&1)newMask ^= (1ll<<idx[x]);
}
c %= mod;
ch1 = calc(val+1, mask)%mod;
ch2 = calc(val+1, mask^newMask)%mod;
ret = (mul(c, ch1) + mul(c, ch2))%mod;
}
else ret = calc(val+1, mask)%mod;
return ret;
}
void solve() {
cin >> n;
v.assign(n, 0);
idx.assign(70, 0);
frequency.assign(71, 0);
vector<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67};
fin(0, n) cin >> v[i], frequency[v[i]]++;
for (int i = 0, id = 0; i < primes.size(); i++) {
idx[primes[i]] = id++;
}
for (int i = 2; i < 71; i++) {
ll tmp = i;
vector<int> f(70, 0);
while (tmp > 1) {
ll p = spf[tmp];
tmp /= p;
f[p]++;
}
for (int j = 2; j < 70; j++) {
if (f[j] > 0) {
freq[i].push_back({j, f[j]});
}
}
}
memset(dp, -1, sizeof(dp));
cout << calc(1, 0)-1 << "\n";
}
int main() {
FAST;
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
precompute();
int tt = 1; //cin >> tt;
while(tt--){
solve();
}
return 0;
}
LyoKKiBBdXRob3I6IEdlZXphCiovCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaW4oYSwgbikgZm9yKGludCBpID0gYTsgaSA8IG47IGkrKykKI2RlZmluZSBmam4oYSwgbikgZm9yKGludCBqID0gYTsgaiA8IG47IGorKykKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLGEuZW5kKCkKI2RlZmluZSBhbGxyKGEpIGEucmJlZ2luKCksYS5yZW5kKCkKI2RlZmluZSBGQVNUIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGRvdWJsZSBQSSA9IGFjb3MoLTEpOwpjb25zdCBpbnQgTiA9IDFlNSs1Owpjb25zdCBsbCBvbyA9IDB4M2YzZjNmM2YzZjNmM2YzZjsKY29uc3QgaW50IG1vZCA9IDEwMDAwMDAwMDcsIGluZiA9IDFlNjsKCnN0cmluZyBkaVtdID0geyJEIiwiTCIsICJVIiwgIlIiLCAiVUwiLCAiVVIiLCAiREwiLCAiRFIifTsKaW50IGR4W10gPSB7KzEsICswLCArMCwgLTEsIC0xLCAtMSwgKzEsICsxfTsKaW50IGR5W10gPSB7KzAsIC0xLCArMSwgKzAsIC0xLCArMSwgLTEsICsxfTsKY2hhciBkY1tdID0geydEJywgJ0wnLCAnUicsICdVJ307CgpsbCBuOwp2ZWN0b3I8bGw+IHY7CnZlY3RvcjxpbnQ+IGlkeCwgZnJlcXVlbmN5OwppbnQgZHBbNzFdWzE8PDE5XTsKdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBmcmVxWzcxXTsKbGwgc3BmWzcyXTsKCnZvaWQgcHJlY29tcHV0ZSgpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNzI7IGkrKykgc3BmW2ldID0gaTsKICAgIGZvciAobGwgaSA9IDI7IGkgPCA3MjsgaSsrKSB7CiAgICAgICAgaWYgKHNwZltpXSA9PSBpKSB7CiAgICAgICAgICAgIGZvciAobGwgaiA9IGkqaTsgaiA8IDcyOyBqKz1pKSBzcGZbal0gPSBpOwogICAgICAgIH0KICAgIH0KfQoKbGwgbXVsKGxsIGEsIGxsIGIpIHsKICAgIHJldHVybiAoYSVtb2QgKiBiJW1vZCklbW9kOwp9CgpsbCBjYWxjKGxsIHZhbCwgbGwgbWFzaykgewogICAgaWYgKHZhbCA9PSA3MSkgcmV0dXJuIG1hc2sgPT0gMDsKCiAgICBpbnQgJnJldCA9IGRwW3ZhbF1bbWFza107CiAgICBpZiAofnJldClyZXR1cm4gcmV0OwogICAgcmV0ID0gMDsKICAgIGxsIGNoMSA9IDA7CiAgICBsbCBjaDIgPSAwOwogICAgaWYgKGZyZXF1ZW5jeVt2YWxdID4gMCkgewogICAgICAgIGxsIGMgPSAxOyAvLyAyXihuLTEpCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkrMSA8IGZyZXF1ZW5jeVt2YWxdOyBpKyspIHsKICAgICAgICAgICAgYyAqPSAyOwogICAgICAgICAgICBpZiAoYyA+PSBtb2QpIGMgLT0gbW9kOwogICAgICAgIH0KICAgICAgICBsbCBuZXdNYXNrID0gMDsKICAgICAgICBmb3IgKGF1dG8gW3gsIGZdIDogZnJlcVt2YWxdKSB7CiAgICAgICAgICAgIGlmIChmJjEpbmV3TWFzayBePSAoMWxsPDxpZHhbeF0pOwogICAgICAgIH0KICAgICAgICBjICU9IG1vZDsKICAgICAgICBjaDEgPSBjYWxjKHZhbCsxLCBtYXNrKSVtb2Q7CiAgICAgICAgY2gyID0gY2FsYyh2YWwrMSwgbWFza15uZXdNYXNrKSVtb2Q7CiAgICAgICAgcmV0ID0gKG11bChjLCBjaDEpICsgbXVsKGMsIGNoMikpJW1vZDsKICAgIH0KICAgIGVsc2UgcmV0ID0gY2FsYyh2YWwrMSwgbWFzayklbW9kOwoKICAgIHJldHVybiByZXQ7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbjsKICAgIHYuYXNzaWduKG4sIDApOwogICAgaWR4LmFzc2lnbig3MCwgMCk7CiAgICBmcmVxdWVuY3kuYXNzaWduKDcxLCAwKTsKICAgIHZlY3RvcjxpbnQ+IHByaW1lcyA9IHsyLCAzLCA1LCA3LCAxMSwgMTMsIDE3LCAxOSwgMjMsIDI5LCAzMSwgMzcsIDQxLCA0MywgNDcsIDUzLCA1OSwgNjEsIDY3fTsKICAgIGZpbigwLCBuKSBjaW4gPj4gdltpXSwgZnJlcXVlbmN5W3ZbaV1dKys7CiAgICBmb3IgKGludCBpID0gMCwgaWQgPSAwOyBpIDwgcHJpbWVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgaWR4W3ByaW1lc1tpXV0gPSBpZCsrOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAyOyBpIDwgNzE7IGkrKykgewogICAgICAgIGxsIHRtcCA9IGk7CiAgICAgICAgdmVjdG9yPGludD4gZig3MCwgMCk7CiAgICAgICAgd2hpbGUgKHRtcCA+IDEpIHsKICAgICAgICAgICAgbGwgcCA9IHNwZlt0bXBdOwogICAgICAgICAgICB0bXAgLz0gcDsKICAgICAgICAgICAgZltwXSsrOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaiA9IDI7IGogPCA3MDsgaisrKSB7CiAgICAgICAgICAgIGlmIChmW2pdID4gMCkgewogICAgICAgICAgICAgICAgZnJlcVtpXS5wdXNoX2JhY2soe2osIGZbal19KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBtZW1zZXQoZHAsIC0xLCBzaXplb2YoZHApKTsKCiAgICBjb3V0IDw8IGNhbGMoMSwgMCktMSAgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBGQVNUOwojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCk7CiNlbmRpZgogICAgcHJlY29tcHV0ZSgpOwogICAgaW50IHR0ID0gMTsgLy9jaW4gPj4gdHQ7CiAgICB3aGlsZSh0dC0tKXsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=