#include<bits/stdc++.h>
#define Rint register int
#define MP make_pair
using namespace std;
typedef long long LL;
typedef pair<LL, LL> pii;
const int mod = 1e9 + 7;
LL n;
map<pii, int> M;
inline void upd(int &a, int b){a += b; if(a >= mod) a -= mod;}
inline int dfs(LL x, LL y){
	if(y < 0) return 0;
	if(!y) return 1;
	if(M.count(MP(x, y))) return M[MP(x, y)];
	int res = dfs(x >> 1, y >> 1);
	upd(res, dfs(x - 1 >> 1, y - 1 >> 1));
	if(y >= 2) upd(res, dfs(x >> 1, y - 2 >> 1));
	return M[MP(x, y)] = res;
}
int main(){
	scanf("%lld", &n);
	printf("%d", dfs(n, n));
}