#include <iostream>
#include <map>

using namespace std;
using ll = long long;

const ll MOD = 1000000007;

map<ll, ll> dp;
ll rec(ll N) {
    if (N < 0) return 0;
    if (N == 0) return 1;
    if (dp.count(N)) return dp[N];

    dp[N] = rec((N - 1) / 2);              // 奇数
    dp[N] += rec(N / 2);                   // 偶数 最下位が共に0
    if (N > 1) dp[N] += rec((N - 2) / 2);  // 偶数 最下位が共に1
    return dp[N] %= MOD;
}

int main() {
    ll N;
    cin >> N;
    cout << rec(N) << endl;
    return 0;
}
