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.util.*;
import java.io.*;

public class a
{
	public static void main(String[] arg) throws IOException
	{
		new a();
	}
	final long MOD = 1_000_000_007;
	final int stop = 1_000_001;
	long pow(long base, long exp)
	{
		if(exp == 0) return 1;
		if((exp&1) != 0) return base*pow(base, exp-1)%MOD;
		long ret = pow(base, exp/2);
		return ret*ret%MOD;
	}
	public a() throws IOException
	{
		FastScanner in = new FastScanner(System.in);
		int n = in.nextInt();
		int[] dp = new int[stop];
		for(int i = 0; i < n; i++) dp[in.nextInt()]++;
		for(int i = 0; i < 20; i++)
		{
			for(int bm = 0; bm < stop; bm++)
			{
				if(((1<<i)&bm) != 0)
				{
					dp[bm^(1<<i)] += dp[bm];
				}
			}
		}
		long ans = 0;
		long[] two = new long[stop];
		two[0] = 1;
		for(int i = 1; i < two.length; i++)
		{
			two[i] = two[i-1]*2%MOD;
		}
		for(int bm = 0; bm < stop; bm++)
		{
			if(Integer.bitCount(bm)%2 == 0)
			{
				ans += two[(int)dp[bm]];
				ans %= MOD;
			}
			else
			{
				ans -= two[(int)dp[bm]];
				ans += MOD;
				ans %= MOD;
			}
		}
		ans++;
		ans %= MOD;
		System.out.println(ans);
	}
	class FastScanner
	{
		BufferedReader br;
		StringTokenizer st;
		public FastScanner(InputStream in)
		{
			br = new BufferedReader(new InputStreamReader(in));
			st = new StringTokenizer("");
		}
		public String next() throws IOException
		{
			while(!st.hasMoreTokens()) st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}
		public int nextInt() throws IOException
		{
			return Integer.parseInt(next());
		}
	}
}