import numpy as np
from tqdm import tqdm

divided_num = 10^9 + 7
nums = int(input())  # 入力される数字の個数を入力している。
input_nums = input().split(" ")  # これにて、入力された数字を格納する。
input_nums2 = input_nums  # 二つの計算をするので、もう一つコピーを作っておく。

xor_result = []  # 排他的論理和の計算を格納しておく場所

for j in tqdm(range(0, len(input_nums2)-1)):
    print('Wait...')
    for i in tqdm(range(j, len(input_nums))):
        xor_input_nums = []
        xor_input_nums2 = []
        # ここで、対象の2つの数字を二進表記にする。
        a = int(input_nums[i])
        while a >= 2:
            xor_input_nums.append(a%2)  # 2進法の配列を作成（ただし、ここでは逆順になっている。）
            a = int(a / 2)  # 2で割った時の整数部分を格納する。
        b = int(input_nums2[j])
        while b >= 2:
            xor_input_nums2.append(b%2)
            b = int(b / 2)  # 2で割った時の整数部分を格納する。
        """
        2進法での表記を格納したので、ここからはif文
        によって排他的論理和の計算を行う。
        """
        if len(xor_input_nums) != len(xor_input_nums2):
            if len(xor_input_nums) > len(xor_input_nums2):
                for n in range(0,len(xor_input_nums)-len(xor_input_nums2)):
                    xor_input_nums2.append(0)
            else:
                for n in range(0,len(xor_input_nums2)-len(xor_input_nums)):
                    xor_input_nums.append(0)
        
        xor_suc_array = []
        print('Wait...')
        for p in tqdm(range(0, len(xor_input_nums2))):
            xor_suc_array.append((int(xor_input_nums[p]) + int(xor_input_nums2[p])) % 2)  # 排他的論理和の計算の結果
        l = 0
        m = 0
        for k in xor_suc_array:
            m += k * (2^l)
            l += 1
        xor_result.append(m)

sums = np.sum(xor_result)
print(sums % divided_num)
