#include <bits/stdc++.h>
using namespace std;

using ll = long long;

using State = pair<ll, ll>;
map<State, ll> saved;
ll solve(const ll S, const ll X)
{
    if (saved.find({S, X}) != end(saved))
        return saved[{S, X}];

    if (S == 0) return X >= 0;
    else if (S == 1) return (X >= 0) + (X >= 1);
    else
    {
        auto& result = saved[{S, X}];
        result = (solve(S/2, X/2) + solve((S-1)/2, (X-1)/2) + solve((S-2)/2, X/2)) % int(1e9+7);
        return result;
    }
}

int main()
{
    ll N; cin >> N;
    cout << solve(N, N) << endl;
}
