#include <cstdio>
#include <map>
typedef long long ll;
const int Mod=1e9+7;
const int maxn=1000000+5;
using namespace std;
ll a[25]={1,2,4,5,8,10,13,14,18,21,26,28,33,36,40,41,46,50,57,60,68};
map<ll,ll> mp;//记忆化

ll dfs(ll x) {
    if(x<=20)
        return a[x];
    if(mp[x])
        return mp[x];
    if(x%2)
        return mp[x]=(2*dfs(x/2)%Mod+dfs(x/2-1)%Mod)%Mod;
    else
        return mp[x]=(2*dfs(x/2-1)%Mod+dfs(x/2)%Mod)%Mod;
}

int main() {
    ll n;
    scanf("%lld",&n);
    printf("%lld\n",dfs(n));
    return 0;
}