The (1|ID) term in your model specifies random intercepts among the ID values. The intercept, with default R coding, is the estimate of the outcome when all fixed categorical predictors are at reference levels and all fixed continuous predictors have values of 0. So there's no problem with having the fixed predictors involved in interactions with each other; those random intercepts still make sense in terms of variation about the overall model intercept.
A potential problem is that your model omits individual coefficients for B and C and a B:C interaction. The term A/(B*C) is not the same as A*B*C:
attr(terms(formula(~A/(B*C))),"term.labels")
# [1] "A" "A:B" "A:C" "A:B:C"
attr(terms(formula(~A*B*C)),"term.labels")
#[1] "A" "B" "C" "A:B" "A:C" "B:C" "A:B:C"
In general, it's poor practice to omit lower-level coefficients of terms involved in higher-level interactions. As discussed on the linked page, there are some simple situations where you might get away with that, but with the three-way A:B:C interaction I suspect that you will be better off including individual coefficients for B and C and for a B:C interaction.