#include <bits/stdc++.h>
#include <algorithm>
#include <cmath>
using namespace std;
#define ll long long int

const ll mod = 1e9+7;


ll mul(ll a,ll b){
    a%=mod;
    b%=mod;
    ll res = (a*b)%mod;
    return res;
}

ll add(ll a,ll b){
    ll res = (a+b+mod)%mod;
    return res;
}

ll binpow(ll a,ll b){
    ll res = 1;
    while(b>0){
        if(b&1)res = mul(res,a);
        a = mul(a,a);
        b>>=1;
    }
    return res;
}


ll inv(ll a){
    return binpow(a,mod-2);
}

ll series(ll a,ll r,ll n){
    ll ans = mul(a,add(1,-binpow(r,n)));
    ans = mul(ans,inv(add(1,-r)));
    return ans%mod;
}

int main(){
    ll n;
    cin>>n;
    // cout<<series(1,2,2);
    ll num = n;
    ll bi = 0;
    while(num!=0){
        num/=2;
        bi++;
    }
    ll p = 4;
    ll prev = 27;
    ll ans=0;
    for(int i = 3;i<=bi;i++){
        ll to=0,las;
        if(i==bi)to = n-p+1,las = n;
        else to = 2*p-p,las=2*p-1;
        ll aa = binpow(2,mul(to,i));
        // cout<<aa<<" "<<prev*aa<<" s\n";
        ans = mul(prev,aa);
        ll a = inv(binpow(2,i));
        ll r = a;
        ll fir = add(p,-mul(las,inv(binpow(2,mul(to,i)))));
        ll cur = 1;
        ll bb = mul(aa,inv(add(binpow(2,i),-1)));
        if(to>=1){
            cur = add(fir,series(a,r,to-1));
            cur = mul(cur,bb);
        }
        ans += (cur);
        ans%=mod;
        p*=2;
        prev=ans;
    }
    cout<<ans;
    return 0;
}

