#include<iostream>
#include<cmath>
using namespace std;
typedef long long llong;

llong n,*lst;
string *lst_bin;
static const llong MOD = pow(10,9) + 7;

void init(){
    cin>>n;
    lst = new llong[n];
    lst_bin = new string[n];
    for(int i=0;i<n;i++)cin>>lst[i];
}

string to_binString(llong val)
{
    if( !val )
        return string("0");
    string str;
    while( val != 0 ) {
        if( (val & 1) == 0 )  // val は偶数か？
            str.insert(str.begin(), '0');  //  偶数の場合
        else
            str.insert(str.begin(), '1');  //  奇数の場合
        val = val >> 1;
    }
    return str;
}
void solve(){
    llong max_length=0;
    for(int i=0;i<n;i++){
        lst_bin[i] = to_binString(lst[i]);
        max_length = max(max_length,(llong)lst_bin[i].size());
        //size_t型をintへ変換するにはこうする.
    }
    llong cnt_1[max_length] = {}, cnt_0[max_length] = {};
    for(int i=0;i<n;i++){
        string::iterator it = lst_bin[i].end();
        for(int j=1;j<max_length+1;j++){
            if((llong)lst_bin[i].size() < j){
                cnt_0[j-1] += 1;
            }else{
                if(*(it-j) == '1'){
                    cnt_1[j-1] += 1;
                }else{
                    cnt_0[j-1] += 1;
                }
            }
        }
    }
    llong ans=0;
    for(int i=0;i<max_length;i++){
        llong cnt_0_i = cnt_0[i];
        llong cnt_1_i = cnt_1[i];
        llong x = 1;
        for(int j=0;j<i;j++){
            x = x*2;
            while(x > 0){
                x -= MOD;
            } 
            x += MOD;
        }
        ans += cnt_0_i * cnt_1_i * x ;
        while(ans > 0){
            ans -= MOD;
        }
        ans += MOD;
    }
    cout<<ans<<endl;
}

int main(){
    init();
    solve();
    return 0;
}