#include <iostream>
#include <vector>
#include <map>
using namespace std;
#define MOD 1000000007

map<pair<long long, long long>, long long> dp;
long long func(long long S, long long X){
    if(dp.count(make_pair(S, X))) return dp[make_pair(S, X)];
    long long &r = dp[make_pair(S, X)];
    if(S == 0){
        r = 1;
        return 1;
    }
    if(X == 0){
        int i = 0;
        while(S != 0){
            S >>= 1;
            i++;
        }
        r = i;
        return i;
    }

    long long d = func(S/2, X/2);
    if(S>=1&&X>=1)
        d = (d+func((S-1)/2, (X-1)/2))%MOD;
    if(S>=2)
        d = (d+func((S-2)/2, X/2))%MOD;
    r = d;
    return d;
}

int main(){
    long long N;
    cin >> N;
    cout << func(N, N) << endl;
	return 0;
}