The textual description is correct, but y = y + x is not the right way to define a function that takes one argument y and returns the sum y + x. For that you either have to give it a name, like foo y = y + x or you can use a lambda, which is an anonymous function, like this: \y -> y + x (the \ is an ascii stand-in for the greek lambda letter).
multThree :: (Num a) => a -> a -> a -> a
multThree x y z = x * y * z
Following the same logic as above I know understand it like the below
assuming we call that function with the numbers 3 , 5 , 9
-- A function returns another function
(multThree 3) y z = 3 * y * z
-- A function returns another function
((mult 3) 5) z = 3 * 5 * z
-- A function returns a Int
((mult 3) 5) 9 = 3 * 5 * 9
Each function takes one argument and returns a function.
The way that you described it is correct, and in the first chapter of the book Hutton introduces a notation (not Haskell syntax, just a mathematical notation) for breaking down the application of functions to arguments using equational reasoning. Your analysis of how multThree works is exactly what would happen, you just wrote it without using the equational reasoning syntax the book uses. It would be a good exercise to rewrite these curried functions and the process of applying them to arguments using that style, as it is a really useful way to think about Haskell code.
You might also want to check out another recently asked question about currying here. In my answer I went into detail about how the types of curried functions work, but one thing I didn’t mention was that, as a result of function types associating from the right, function application associates from the left. And that’s exactly what you just figured out in your last reply! The question the other OP asked might come up for you as well while you’re thinking about this topic, so I do think you should check out that thread.