#include <iostream>
#include <cmath>
#include <climits>
#include <numeric>
#include <algorithm>
#include <map>
#include <sstream>
#include <string>
#include <variant>
#include <vector>
#include <iomanip>
using namespace std;
vector<string> split(const string& haystack, const string& needle) {
vector<string> result;
size_t start_pos = 0;
size_t found_pos = haystack.find(needle, start_pos);
while (found_pos != string::npos) {
size_t count = found_pos - start_pos;
string token = haystack.substr(start_pos, count);
if (!token.empty()) {
result.push_back(token);
}
start_pos = found_pos + needle.length();
found_pos = haystack.find(needle, start_pos);
}
string last_token = haystack.substr(start_pos);
if (!last_token.empty()) {
result.push_back(last_token);
}
return result;
}
int main() {
string s; cin >> s;
int sum = 0;
for (int i = 0; i < s.length(); i++) {
sum = sum + (s[i] - '0');
}
int digit_root = -1;
if (sum % 9 == 0 && sum != 0) {
digit_root = 9;
}
else {
digit_root = sum%9;
}
if (digit_root == 9) {
cout << "YES";
}
else {
cout << "NO";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjbGltaXRzPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2YXJpYW50PgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdmVjdG9yPHN0cmluZz4gc3BsaXQoY29uc3Qgc3RyaW5nJiBoYXlzdGFjaywgY29uc3Qgc3RyaW5nJiBuZWVkbGUpIHsKICAgIHZlY3RvcjxzdHJpbmc+IHJlc3VsdDsKICAgIHNpemVfdCBzdGFydF9wb3MgPSAwOwogICAgc2l6ZV90IGZvdW5kX3BvcyA9IGhheXN0YWNrLmZpbmQobmVlZGxlLCBzdGFydF9wb3MpOwogICAgd2hpbGUgKGZvdW5kX3BvcyAhPSBzdHJpbmc6Om5wb3MpIHsKICAgICAgICBzaXplX3QgY291bnQgPSBmb3VuZF9wb3MgLSBzdGFydF9wb3M7CiAgICAgICAgc3RyaW5nIHRva2VuID0gaGF5c3RhY2suc3Vic3RyKHN0YXJ0X3BvcywgY291bnQpOwogICAgICAgIGlmICghdG9rZW4uZW1wdHkoKSkgewogICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKHRva2VuKTsKICAgICAgICB9CiAgICAgICAgc3RhcnRfcG9zID0gZm91bmRfcG9zICsgbmVlZGxlLmxlbmd0aCgpOwogICAgICAgIGZvdW5kX3BvcyA9IGhheXN0YWNrLmZpbmQobmVlZGxlLCBzdGFydF9wb3MpOwogICAgfQogICAgc3RyaW5nIGxhc3RfdG9rZW4gPSBoYXlzdGFjay5zdWJzdHIoc3RhcnRfcG9zKTsKICAgIGlmICghbGFzdF90b2tlbi5lbXB0eSgpKSB7CiAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhsYXN0X3Rva2VuKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkgewogICAgCiAgICBzdHJpbmcgczsgY2luID4+IHM7CiAgICBpbnQgc3VtID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgc3VtID0gc3VtICsgKHNbaV0gLSAnMCcpOwogICAgfQogICAgaW50IGRpZ2l0X3Jvb3QgPSAtMTsKICAgIGlmIChzdW0gJSA5ID09IDAgJiYgc3VtICE9IDApIHsKICAgICAgICBkaWdpdF9yb290ID0gOTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGRpZ2l0X3Jvb3QgPSBzdW0lOTsKICAgIH0KICAgIGlmIChkaWdpdF9yb290ID09IDkpIHsKICAgICAgICBjb3V0IDw8ICJZRVMiOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgY291dCA8PCAiTk8iOwogICAgfQogICAgcmV0dXJuIDA7Cn0K