2
1 31
 2
1 0
 10
450661 128600 993228 725823 293549 33490 843121 903634 556169 448234
 1
1
 5
1 3 5 7 9
 6
524 529 5249 524 529 529
 3
1 2 3
 2
0 1
 55
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 3 4 5 6 7 8 9 4 5 6 7 8 9 5 6 7 8 9 6 7 8 9 7 8 9 8 9 9
 16
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
 3
128 1024 2048
 10
3 3 3 5 5 3 3 3 3 5
 1
0
 2
1 2
 2
0 0
 2
1 1

0
 2
 632
 0
 0
 24
 2
 2
 621247139
 64594
 4
 0
 1
 1
 3
 0

#include <iostream>
#include <stdio.h>
#include <vector>
#include <queue>
#include <set>
#include <string>
#include <math.h>

using namespace std;

typedef long long ll;
const int MAX = 1000000;
 
ll rem = 1000000007;

vector<ll> cnt(2000001),power(1000001);
vector<vector<ll> > f(21,1111111);

int main(){

    int n;
    cin >> n;
    int mx = 0;

    for(int i = 0; i < n; i++){
        int a;
        cin >> a;
        cnt[a]++;
        mx = max(mx,a);
    }

    power[0] = 1;

    for(int i = 1; i <= MAX; i++) {
        power[i] = (power[i-1] << 1) % rem;
    }


    ll rest = 0;
    
    int m;
    for(m = 21; !((1<<m) & mx); m--);
    

    for(int x = (1 << (m+1)) - 1; x >= 0; x--){
        
        if(x & 1){
            f[0][x] = cnt[x];
        } else f[0][x] = cnt[x] + cnt[x ^ 1];
        
        for(int k = 1; k <= m; k++){
            if(x & (1 << k)){
                f[k][x] = f[k-1][x];
            } else f[k][x] = f[k-1][x] + f[k-1][x ^ (1<<k)];
            f[k][x] %= rem;
        }

        int j = x;
        int num = 0;

        while(j){
            num += j & 1;
            j = j >> 1;
        }

        if(num & 1) rest -= power[f[m][x]];
        else rest += power[f[m][x]];
        rest %= rem;
    }

    cout << rest;

 

    return 0;
}