#include <iostream>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
#include <climits>
#include <iomanip>
#include <cstdio>
#include<fstream>
#define ll long long int
#define MOD 1000000007
#define inf 20000000000000
#define eps 0.0000000000001
using namespace std ;
ll n ;
ll arr[61] ;
int main()
{
// ios::sync_with_stdio(false);cin.tie(0) ;cout.tie(0) ;
cin>>n ;
for(ll i = 1 ; i <= n ; ++i)
{
for(ll j = 0 ; j <= 60 ;++j)
{
if( ( (1LL << j) & i ) > 0 )
arr[j]++ ;
}
}
ll maxbit = 0 ;
for(ll j = 60 ; j >= 0 ; --j)
{
if(arr[j] > 0 )
{
maxbit = j ;
break ;
}
}
//cout<<"maxbit "<<maxbit<<"\n" ;
ll carry = 0 ;
vector<ll>ans ;
for(ll i = 0 ; i <= maxbit ; ++i)
{
ll noOfPresent = arr[i] ;
ll noOfAbsent = n -noOfPresent ;
//for present number
ll sum = (noOfPresent * n) ;
//for absent numbers
sum = (sum + (noOfAbsent * noOfPresent)) ;
sum = (sum + carry);
if(sum % 2 == 0 )
{
carry = sum/2 ;
ans.push_back(0) ;
}
else
{
carry = sum/2 ;
ans.push_back(1) ;
}
// cout<<carry<<" "<<sum<<"\n";
}
vector<ll>car ;
ll cur = 0 ;
while(carry > 0)
{
if( ( carry & 1 ) > 0 )
car.push_back(1) ;
else
car.push_back(0) ;
cur++ ;
carry = (carry >> 1 );
}
// for(auto y : car)
// cout<<y ;
// cout<<"\n\n";
for(auto j : car)
ans.push_back(j) ;
reverse(ans.begin() , ans.end() ) ;
ll fans = 0 ;
cur = 1 ;
for(ll j = ans.size() - 1 ; j >= 0 ; --j )
{
if(ans[j] == 1)
{
fans = (fans + cur)%MOD ;
}
cur = (cur * 2) % MOD ;
}
cout<< (fans % MOD) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDxjbGltaXRzPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGU8ZnN0cmVhbT4KI2RlZmluZSBsbCAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBpbmYgIDIwMDAwMDAwMDAwMDAwCiNkZWZpbmUgZXBzICAwLjAwMDAwMDAwMDAwMDEKdXNpbmcgbmFtZXNwYWNlIHN0ZCA7IAoKCmxsICBuIDsKCmxsIGFycls2MV0gOyAgCgppbnQgbWFpbigpCnsKIC8vIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKDApIDtjb3V0LnRpZSgwKSA7CiAKICBjaW4+Pm4gOyAgCiAKCiBmb3IobGwgaSAgID0gMSAgOyAgaSA8PSAgbiA7ICsraSkKIHsKICAgIGZvcihsbCAgaiAgPSAwICA7ICBqIDw9IDYwICA7KytqKQogICAgewogICAgICAgICBpZiggKCAoMUxMIDw8IGopICYgaSAgKSA+ICAwICkKICAgICAgICAgICBhcnJbal0rKyAgOyAgCiAgICB9CiB9CgpsbCBtYXhiaXQgPSAwICA7CmZvcihsbCBqICA9IDYwIDsgIGogID49IDAgIDsgLS1qKQp7CiAgICBpZihhcnJbal0gPiAgMCAgKQogICAgICB7CiAgICAgICAgICBtYXhiaXQgID0gIGogIDsgIAogICAgICAgICAgYnJlYWsgOyAgIAogICAgICB9Cn0KCi8vY291dDw8Im1heGJpdCAiPDxtYXhiaXQ8PCJcbiIgOwoKCgogbGwgY2FycnkgPSAgMCAgIDsKCiB2ZWN0b3I8bGw+YW5zIDsgICAKIAogZm9yKGxsICBpID0gMCAgOyAgaSAgPD0gIG1heGJpdCA7ICsraSkKIHsKICAgIGxsIG5vT2ZQcmVzZW50ID0gIGFycltpXSAgOyAKICAgIGxsIG5vT2ZBYnNlbnQgPSAgbiAgIC1ub09mUHJlc2VudCAgOyAgCgoKICAgIC8vZm9yIHByZXNlbnQgbnVtYmVyCiAgICBsbCBzdW0gPSAgKG5vT2ZQcmVzZW50ICogbikgICAgIDsKICAgIC8vZm9yIGFic2VudCBudW1iZXJzCiAgICBzdW0gPSAgKHN1bSArICAobm9PZkFic2VudCAqIG5vT2ZQcmVzZW50KSkgOyAgICAgCgogICAgc3VtID0gICAoc3VtICsgY2FycnkpOyAgCgogICAKCiAgIGlmKHN1bSAlIDIgPT0gMCApCiAgIHsKICAgIGNhcnJ5ID0gc3VtLzIgOyAgIAogICAgYW5zLnB1c2hfYmFjaygwKSA7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICBjYXJyeSA9IHN1bS8yIDsgICAKICAgIGFucy5wdXNoX2JhY2soMSkgOwogICAgfSAKCiAgIC8vIGNvdXQ8PGNhcnJ5PDwiICI8PHN1bTw8IlxuIjsKIH0KCgoKCgp2ZWN0b3I8bGw+Y2FyIDsgICAKbGwgY3VyID0gMCAgIDsKd2hpbGUoY2FycnkgPiAwKQp7CgogICBpZiggKCBjYXJyeSAmIDEgKSAgPiAwICkKICAgICAgY2FyLnB1c2hfYmFjaygxKSAgOwogICBlbHNlCiAgICAgIGNhci5wdXNoX2JhY2soMCkgIDsgIAoKICAgY3VyKysgOyAKICAgY2FycnkgID0gKGNhcnJ5ID4+IDEgKTsgCn0KCgovLyBmb3IoYXV0byB5ICA6IGNhcikKLy8gICBjb3V0PDx5ICA7ICAKLy8gY291dDw8IlxuXG4iOwoKCmZvcihhdXRvIGogICA6IGNhcikKICAgYW5zLnB1c2hfYmFjayhqKSA7ICAKCgogcmV2ZXJzZShhbnMuYmVnaW4oKSAgICwgIGFucy5lbmQoKSApIDsgIAoKCgoKIGxsIGZhbnMgID0gMCAgOyAgIAoKCiAgIGN1ciA9ICAxIDsgICAKCgoKICBmb3IobGwgICAgaiAgPSAgYW5zLnNpemUoKSAgIC0gMSAgOyAgaiAgPj0gIDAgOyAtLWogICkKICB7CgogICAKICAgICAgICAgICAgIGlmKGFuc1tqXSA9PSAxKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZhbnMgID0gIChmYW5zICsgIGN1ciklTU9EIDsgIAogICAgICAgICAgICAgfQoKICAgICAgICAgICAgIGN1ciA9IChjdXIgKiAyKSAlIE1PRCA7ICAKICB9CgoKCmNvdXQ8PCAoZmFucyAlICBNT0QpIDsgCgoKCgogCiAgcmV0dXJuIDAgOwogIAp9IAoKCgo=