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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class D257 {
	static final long MOD = (long)(1e9+7);
	static long[] fs;
	static long[][] memo;
	public static void main(String[] args) {
		MyScanner in = new MyScanner();
		int n = in.nextInt();
		fs = new long[1 << 20];
		for(int i=0;i<n;i++) {
			fs[in.nextInt()]++;
		}
		memo = new long[20][1 << 20];
		for(long[] arr : memo)
			Arrays.fill(arr, -1);
		long ans = 0;
		for(int i=0;i<fs.length;i++) {
			int bitcount = Integer.bitCount(i);
			ans += fmpow(2,countSupersets(i, 0)) * (bitcount % 2 == 0 ? 1 : -1);
			ans %= MOD;
		}
		if(ans < 0)
			ans += MOD;
		System.out.println(ans);
		
	}
	static long fmpow(long a, long b) {
		if(b == 0)
			return 1;
		if(b == 1)
			return a;
		long bonus = 1;
		while(b > 1) {
			if(b % 2 != 0)
				bonus = (bonus * a) % MOD;
			b /= 2;
			a = (a*a)%MOD;
		}
		return (a*bonus)%MOD;
	}
	public static long countSupersets(int mask, int idx) {
		 if(idx == 20)
			 return fs[mask];
		 if(memo[idx][mask] != -1)
			 return memo[idx][mask];
		 long ans = countSupersets(mask, idx+1);
		 int bit = 1 << idx;
		 if((mask & bit) == 0)
			 ans += countSupersets(mask|bit,idx+1);
		 return memo[idx][mask] = ans;
	}

	private static class MyScanner {
		BufferedReader br;
		StringTokenizer st;

		public MyScanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(this.next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}
	}
}
