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.StringTokenizer;

public class CF257_Numbers {

	public static void main(String[] args) {

		MyScanner in = new MyScanner();

		int n = in.nextInt();

		long[] counts = new long[23];
		long[][] doubleCounts = new long[23][23];

		for (int i = 0; i < n; i++) {
			int num = in.nextInt();
			// Find ones
			for (int ind1 = 0; ind1 < 23; ind1++) {
				if ((num & (1 << ind1)) != 0) {
					counts[ind1]++;
					for (int ind2 = ind1 + 1; ind2 < 23; ind2++) {
						if ((num & (1 << ind2)) != 0) {
							doubleCounts[ind1][ind2]++;
							break;
						}
					}
				}
			}
		}

		long badCombs = 0;
		for (int i = 0; i < counts.length; i++) {
			long allBadCombs = pow2(counts[i]);
		
			long oldBadCombs = 0;
			for(int j = 0; j < i; j++) {
				oldBadCombs = MOD(oldBadCombs +  pow2(doubleCounts[j][i]));
			}
			
			allBadCombs = MOD(allBadCombs - oldBadCombs);
			badCombs = MOD(badCombs + allBadCombs);
		}

		long totCombs = pow2(n);

		System.out.println(MOD(totCombs - badCombs));
	}

	public static long pow2(long pow) {
		long val = 1;
		for (long i = 0; i < pow; i++) {
			val = MOD(val * 2);
		}
		val = MOD(val - 1);
		return val;
	}

	static long MODVAL = 1000000007;

	public static long MOD(long x) {
		while (x < 0) {
			x += MODVAL;
		}

		return x % MODVAL;
	}

	public 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(next());
		}

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

		double nextDouble() {
			return Double.parseDouble(next());
		}

		String nextLine() {
			String str = "";
			try {
				str = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return str;
		}

	}
	// --------------------------------------------------------

}
